/*
 * Copyright 2020 ABSA Group Limited
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package za.co.absa.spline.harvester.dispatcher

import za.co.absa.spline.commons.version.Version
import za.co.absa.spline.commons.version.Version._

object ProducerApiVersion {
  val V1: Version = ver"1"
  val V1_1: Version = ver"1.1"
  val V1_2: Version = ver"1.2"

  val Default: Version = V1

  object SupportedApiRange {
    val Min: Version = V1
    val Max: Version = V1_2
  }

  object JsonSchemaURLs {
    private val PlanSchemas: Map[Version, String] = Map(
      ProducerApiVersion.V1 -> "https://cdn.jsdelivr.net/gh/AbsaOSS/spline@api-doc/schemas/producer/execution-plan-1.0.json",
      ProducerApiVersion.V1_1 -> "https://cdn.jsdelivr.net/gh/AbsaOSS/spline@api-doc/schemas/producer/execution-plan-1.1.json",
      ProducerApiVersion.V1_2 -> "https://cdn.jsdelivr.net/gh/AbsaOSS/spline@api-doc/schemas/producer/execution-plan-1.2.json"
    )
    private val EventSchemas: Map[Version, String] = Map(
      ProducerApiVersion.V1 -> "https://cdn.jsdelivr.net/gh/AbsaOSS/spline@api-doc/schemas/producer/execution-event-1.0.json",
      ProducerApiVersion.V1_1 -> "https://cdn.jsdelivr.net/gh/AbsaOSS/spline@api-doc/schemas/producer/execution-event-1.1.json",
      ProducerApiVersion.V1_2 -> "https://cdn.jsdelivr.net/gh/AbsaOSS/spline@api-doc/schemas/producer/execution-event-1.2.json"
    )

    def planSchemaForAPIVersion(ver: Version): String = PlanSchemas(ver)

    def eventSchemaForAPIVersion(ver: Version): String = EventSchemas(ver)
  }
}
